﻿<?xml version="1.0" encoding="utf-8"?><Articles><Article><ArticlesID>572</ArticlesID><Title>Lập tr&amp;#236;nh hướng đối tượng với JavaScript</Title><Body>&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;JavaScript l&amp;amp;agrave; ng&amp;amp;ocirc;n ngữ lập tr&amp;amp;igrave;nh hướng đối tượng kh&amp;amp;ocirc;ng ho&amp;amp;agrave;n to&amp;amp;agrave;n, tuy kh&amp;amp;ocirc;ng mạnh bằng Java nhưng cũng đủ để đ&amp;amp;aacute;p ứng nhiều y&amp;amp;ecirc;u cầu lập tr&amp;amp;igrave;nh phức tạp. Trong b&amp;amp;agrave;i viết n&amp;amp;agrave;y, c&amp;amp;aacute;c bạn sẽ thấy l&amp;amp;agrave; c&amp;amp;oacute; thể d&amp;amp;ugrave;ng JavaScript để tạo đối tượng v&amp;amp;agrave; thực hiện t&amp;amp;iacute;nh kế thừa như trong Java.&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Kiểu dữ liệu trong JavaScript&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;/strong&amp;gt;Trước ti&amp;amp;ecirc;n, t&amp;amp;ocirc;i muốn n&amp;amp;oacute;i về c&amp;amp;aacute;c kiểu dữ liệu trong JavaScript. Tuy trong JavaScript, ta kh&amp;amp;ocirc;ng thể khai b&amp;amp;aacute;o kiểu của biến nhưng thực tế, mỗi biến thuộc 1 trong 5 kiểu dữ liệu sơ cấp, phi đối tượng l&amp;amp;agrave; undefined, null, boolean, number, string hay 1 trong 2 kiểu dữ liệu đối tượng l&amp;amp;agrave; object v&amp;amp;agrave; function. Để biết kiểu của một biến, h&amp;amp;atilde;y d&amp;amp;ugrave;ng to&amp;amp;aacute;n tử typeof. H&amp;amp;agrave;m sau đ&amp;amp;acirc;y cho bạn biết kiểu của từng tham số truyền đến n&amp;amp;oacute;:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
function reportDataType(){
var s = ;
for (var i=0; i &amp;amp;lt; arguments.length; i++){
s += Argument + i + is + arguments + . ;
s += Its data type is + (typeof arguments) + .\n;
}
alert(s);
}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Để kiểm tra h&amp;amp;agrave;m tr&amp;amp;ecirc;n, h&amp;amp;atilde;y d&amp;amp;ugrave;ng đoạn chương tr&amp;amp;igrave;nh sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
var s;
var bool = false;
var obj = new Object();
var funcObj = new reportDataType();
var func = reportDataType;
reportDataType(s, bool, 123, 123.4, &amp;amp;ldquo;string&amp;amp;rdquo;, null, obj, funcObj, func, reportDataType);&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;em&amp;gt;/* Kết quả hiển thị lần lượt l&amp;amp;agrave; undefined, boolean, number, number, string, null, object, object, function, function. */&amp;lt;/em&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;H&amp;amp;agrave;m tự tạo trong JavaScript&amp;lt;br /&amp;gt;
&amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;
Tiếp theo, ch&amp;amp;uacute;ng ta t&amp;amp;igrave;m hiểu về đặc điểm của h&amp;amp;agrave;m tự tạo trong JavaScript. Trong JavaScript, ngoại trừ 5 kiểu dữ liệu sơ cấp đ&amp;amp;atilde; n&amp;amp;oacute;i, tất cả đều l&amp;amp;agrave; đối tượng, kể cả h&amp;amp;agrave;m. Mỗi khi bạn tạo một h&amp;amp;agrave;m th&amp;amp;igrave; cũng đồng thời tạo ra một đối tượng Function v&amp;amp;agrave; một lớp mang t&amp;amp;ecirc;n h&amp;amp;agrave;m đ&amp;amp;oacute;. Để tạo ra một biến đối tượng thuộc &amp;amp;ldquo;lớp&amp;amp;rdquo; đ&amp;amp;oacute;, bạn cũng d&amp;amp;ugrave;ng từ kh&amp;amp;oacute;a new như b&amp;amp;igrave;nh thường. V&amp;amp;iacute; dụ:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
var func = new reportDataType();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;H&amp;amp;agrave;m bạn tạo l&amp;amp;agrave; một đối tượng n&amp;amp;ecirc;n n&amp;amp;oacute; c&amp;amp;oacute; thể c&amp;amp;oacute; thuộc t&amp;amp;iacute;nh (property), h&amp;amp;agrave;m chức năng (method). H&amp;amp;agrave;m chức năng đầu ti&amp;amp;ecirc;n của n&amp;amp;oacute; l&amp;amp;agrave; h&amp;amp;agrave;m tạo (constructor), ch&amp;amp;iacute;nh l&amp;amp;agrave; h&amp;amp;agrave;m m&amp;amp;agrave; bạn tạo ra. V&amp;amp;iacute; dụ khi t&amp;amp;ocirc;i định nghĩa h&amp;amp;agrave;m reportDataType() tr&amp;amp;ecirc;n th&amp;amp;igrave; t&amp;amp;ocirc;i cũng đ&amp;amp;atilde; định nghĩa một lớp t&amp;amp;ecirc;n reportDataType với h&amp;amp;agrave;m tạo ch&amp;amp;iacute;nh l&amp;amp;agrave; reportDataType().&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
H&amp;amp;agrave;m tạo d&amp;amp;ugrave;ng để khởi tạo đối tượng. Th&amp;amp;ocirc;ng thường, ta sẽ khai b&amp;amp;aacute;o c&amp;amp;aacute;c thuộc t&amp;amp;iacute;nh (v&amp;amp;agrave; gi&amp;amp;aacute; trị mặc định của ch&amp;amp;uacute;ng) v&amp;amp;agrave; h&amp;amp;agrave;m chức năng của lớp b&amp;amp;ecirc;n trong h&amp;amp;agrave;m n&amp;amp;agrave;y. Tuy nhi&amp;amp;ecirc;n, để tiện lợi cho việc tạo kế thừa, ta n&amp;amp;ecirc;n th&amp;amp;ecirc;m h&amp;amp;agrave;m chức năng th&amp;amp;ocirc;ng qua thuộc t&amp;amp;iacute;nh prototype.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
B&amp;amp;ecirc;n trong h&amp;amp;agrave;m tạo v&amp;amp;agrave; h&amp;amp;agrave;m chức năng của một lớp, bạn d&amp;amp;ugrave;ng biến this để chỉ biến đối tượng (instance) hiện tại của lớp. V&amp;amp;iacute; dụ: Giả sử ta định nghĩa 1 lớp ClassA c&amp;amp;oacute; 1 thuộc t&amp;amp;iacute;nh t&amp;amp;ecirc;n m1 v&amp;amp;agrave; tạo ra 2 biến a1, a2 của lớp n&amp;amp;agrave;y.&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
function ClassA(){
this.m1 = 5;
}

var a1 = new ClassA();// (1)
var a2 = new ClassA();// (2)&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt; &amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Với c&amp;amp;acirc;u lệnh (1), this được hiểu l&amp;amp;agrave; đối tượng a1 trong khi với c&amp;amp;acirc;u lệnh (2), this l&amp;amp;agrave; a2.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Giống như mọi đối tượng kh&amp;amp;aacute;c của JavaScript, đối tượng Function cũng c&amp;amp;oacute; thuộc t&amp;amp;iacute;nh prototype. Th&amp;amp;ocirc;ng qua thuộc t&amp;amp;iacute;nh (cũng l&amp;amp;agrave; 1 đối tượng) prototype, ta c&amp;amp;oacute; thể th&amp;amp;ecirc;m thuộc t&amp;amp;iacute;nh v&amp;amp;agrave; h&amp;amp;agrave;m chuy&amp;amp;ecirc;n cấp lớp cho một lớp đ&amp;amp;atilde; định nghĩa. Ch&amp;amp;iacute;nh thuộc t&amp;amp;iacute;nh n&amp;amp;agrave;y gi&amp;amp;uacute;p ta c&amp;amp;oacute; thể lập tr&amp;amp;igrave;nh hướng đối tượng, cụ thể l&amp;amp;agrave; thực hiện sự kế thừa, trong JavaScript. &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Khi bạn muốn gọi 1 thuộc t&amp;amp;iacute;nh (hay h&amp;amp;agrave;m chức năng) của 1 đối tượng, tr&amp;amp;igrave;nh th&amp;amp;ocirc;ng dịch sẽ t&amp;amp;igrave;m xem trong đối tượng ấy c&amp;amp;oacute; t&amp;amp;ecirc;n thuộc t&amp;amp;iacute;nh đ&amp;amp;oacute; kh&amp;amp;ocirc;ng. Nếu kh&amp;amp;ocirc;ng c&amp;amp;oacute;, tr&amp;amp;igrave;nh th&amp;amp;ocirc;ng dịch sẽ t&amp;amp;igrave;m tiếp trong thuộc t&amp;amp;iacute;nh prototype của đối tượng. Nếu kh&amp;amp;ocirc;ng c&amp;amp;oacute;, tr&amp;amp;igrave;nh th&amp;amp;ocirc;ng dịch lại tiếp tục t&amp;amp;igrave;m trong thuộc t&amp;amp;iacute;nh prototype của thuộc t&amp;amp;iacute;nh prototype. Qu&amp;amp;aacute; tr&amp;amp;igrave;nh t&amp;amp;igrave;m kiếm kết th&amp;amp;uacute;c khi t&amp;amp;igrave;m ra thuộc t&amp;amp;iacute;nh cần gọi hay khi kh&amp;amp;ocirc;ng c&amp;amp;ograve;n thuộc t&amp;amp;iacute;nh prototype n&amp;amp;agrave;o để t&amp;amp;igrave;m nữa.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Ngo&amp;amp;agrave;i prototype, mọi đối tượng c&amp;amp;ograve;n c&amp;amp;oacute; một thuộc t&amp;amp;iacute;nh kh&amp;amp;aacute;c l&amp;amp;agrave; constructor. Thuộc t&amp;amp;iacute;nh n&amp;amp;agrave;y trả về đối tượng Function định nghĩa lớp của đối tượng.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Trong mỗi h&amp;amp;agrave;m (ch&amp;amp;iacute;nh x&amp;amp;aacute;c hơn l&amp;amp;agrave; biến đối tượng h&amp;amp;agrave;m) đều c&amp;amp;oacute; một biến cục bộ (private) t&amp;amp;ecirc;n arguments được tạo ra tự động. Biến n&amp;amp;agrave;y l&amp;amp;agrave; một mảng chứa tất cả c&amp;amp;aacute;c tham số truyền đến h&amp;amp;agrave;m. Nhờ c&amp;amp;oacute; n&amp;amp;oacute; m&amp;amp;agrave; một h&amp;amp;agrave;m JavaScript c&amp;amp;oacute; thể c&amp;amp;oacute; một số lượng tham số t&amp;amp;ugrave;y &amp;amp;yacute;, kh&amp;amp;ocirc;ng biết trước; đồng thời, cho d&amp;amp;ugrave; bạn khai b&amp;amp;aacute;o h&amp;amp;agrave;m c&amp;amp;oacute; nhiều tham số, bạn vẫn c&amp;amp;oacute; thể gọi h&amp;amp;agrave;m với số tham số bất k&amp;amp;igrave;.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Mọi h&amp;amp;agrave;m JavaScript c&amp;amp;ograve;n c&amp;amp;oacute; 2 h&amp;amp;agrave;m chức năng đặc biệt l&amp;amp;agrave; call v&amp;amp;agrave; apply. Ch&amp;amp;uacute;ng đều gi&amp;amp;uacute;p ta c&amp;amp;oacute; thể gọi 1 h&amp;amp;agrave;m chức năng của đối tượng n&amp;amp;agrave;y như thể n&amp;amp;oacute; l&amp;amp;agrave; h&amp;amp;agrave;m chức năng của một đối tượng kh&amp;amp;aacute;c. Tham số đầu ti&amp;amp;ecirc;n của 2 h&amp;amp;agrave;m đều l&amp;amp;agrave; đối tượng m&amp;amp;agrave; bạn muốn g&amp;amp;aacute;n h&amp;amp;agrave;m chức năng. Tuy nhi&amp;amp;ecirc;n, nếu như đối với call, c&amp;amp;aacute;c tham số từ tham số thứ hai trở đi sẽ được truyền đến h&amp;amp;agrave;m chức năng cần gọi l&amp;amp;agrave;m tham số th&amp;amp;igrave; với apply, tham số thứ 2 phải l&amp;amp;agrave; 1 mảng c&amp;amp;aacute;c tham số cần truyền. Như vậy, khi số tham số cần truyền l&amp;amp;agrave; x&amp;amp;aacute;c định th&amp;amp;igrave; ta c&amp;amp;oacute; thể d&amp;amp;ugrave;ng call, c&amp;amp;ograve;n khi số tham số cần truyền kh&amp;amp;ocirc;ng x&amp;amp;aacute;c định (chẳng hạn như khi ta cần truyền to&amp;amp;agrave;n bộ mảng arguments) th&amp;amp;igrave; ta n&amp;amp;ecirc;n d&amp;amp;ugrave;ng apply.&amp;lt;br /&amp;gt;
Cuối c&amp;amp;ugrave;ng l&amp;amp;agrave; một số ghi ch&amp;amp;uacute; về c&amp;amp;uacute; ph&amp;amp;aacute;p li&amp;amp;ecirc;n quan đến biến h&amp;amp;agrave;m:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;
&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;412&amp;quot; summary=&amp;quot;&amp;quot; style=&amp;quot;width: 412px; height: 213px;&amp;quot;&amp;gt;
    &amp;lt;tbody&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;C&amp;amp;acirc;u lệnh&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;Kiểu của biến f&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = new Function();&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;function&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = Function();&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;function&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = ClassA;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;function&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = ClassA();&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;kiểu của gi&amp;amp;aacute; trị trả về bởi c&amp;amp;acirc;u lệnh return trong h&amp;amp;agrave;m ClassA()&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = new ClassA();&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;object&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = new function(){}&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;object&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;f = function(){}&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;
            &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; color=&amp;quot;#000000&amp;quot; style=&amp;quot;font-size: 8pt;&amp;quot;&amp;gt;function&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
    &amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Kh&amp;amp;aacute;c biệt cơ bản giữa biến object f v&amp;amp;agrave; biến function f: nếu f l&amp;amp;agrave; function th&amp;amp;igrave; ta c&amp;amp;oacute; thể gọi f().&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;strong&amp;gt;Tạo lớp, đối tượng v&amp;amp;agrave; thực hiện kế thừa&amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Tạo lớp c&amp;amp;oacute; nghĩa l&amp;amp;agrave; định nghĩa c&amp;amp;aacute;c th&amp;amp;agrave;nh vi&amp;amp;ecirc;n của lớp: h&amp;amp;agrave;m tạo, h&amp;amp;agrave;m chức năng, thuộc t&amp;amp;iacute;nh v&amp;amp;agrave; h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh, h&amp;amp;agrave;m sự kiện. Tạo đối tượng l&amp;amp;agrave; tạo ra biến c&amp;amp;oacute; kiểu lớp. JavaScript ph&amp;amp;acirc;n biệt 2 loại th&amp;amp;agrave;nh vi&amp;amp;ecirc;n của lớp: th&amp;amp;agrave;nh vi&amp;amp;ecirc;n cấp lớp (thuộc mọi đối tượng c&amp;amp;ugrave;ng lớp), th&amp;amp;agrave;nh vi&amp;amp;ecirc;n cấp đối tượng (thuộc 1 đối tượng n&amp;amp;agrave;o đ&amp;amp;oacute;). Trong c&amp;amp;aacute;c c&amp;amp;uacute; ph&amp;amp;aacute;p sau, c&amp;amp;uacute; ph&amp;amp;aacute;p định nghĩa th&amp;amp;agrave;nh vi&amp;amp;ecirc;n cấp lớp sẽ bắt đầu l&amp;amp;agrave; this hay T&amp;amp;ecirc;n_Lớp, c&amp;amp;ograve;n c&amp;amp;uacute; ph&amp;amp;aacute;p định nghĩa th&amp;amp;agrave;nh vi&amp;amp;ecirc;n cấp đối tượng bắt đầu bằng T&amp;amp;ecirc;n_Đối_Tượng.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;strong&amp;gt;1- &amp;lt;/strong&amp;gt;Tạo h&amp;amp;agrave;m tạo (constructor)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Tạo lớp bắt đầu từ tạo h&amp;amp;agrave;m tạo. C&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
function T&amp;amp;ecirc;n_Lớp(tham số 1, tham số 2, tham số 3, ...){
//Nội dung của lớp
}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;2-&amp;lt;/strong&amp;gt; Tạo h&amp;amp;agrave;m chức năng (method)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Nếu tạo ngay trong h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
this.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_Chuy&amp;amp;ecirc;n = Định_Nghĩa_H&amp;amp;agrave;m&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Nếu tạo b&amp;amp;ecirc;n ngo&amp;amp;agrave;i h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Lớp.prototype.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_Chuy&amp;amp;ecirc;n = Định_Nghĩa_H&amp;amp;agrave;m
hay

T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_Chuy&amp;amp;ecirc;n = Định_Nghĩa_H&amp;amp;agrave;m&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;C&amp;amp;uacute; ph&amp;amp;aacute;p của phần Định_Nghĩa_H&amp;amp;agrave;m như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_H&amp;amp;agrave;m&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hay &amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
function(tham số 1, tham số 2,...){
//Nội dung h&amp;amp;agrave;m
}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hay&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
Function(&amp;amp;ldquo;tham số 1&amp;amp;rdquo;, &amp;amp;ldquo;tham số 2&amp;amp;rdquo;, &amp;amp;ldquo;tham số 3&amp;amp;rdquo;,...,&amp;amp;rdquo;Nội dung h&amp;amp;agrave;m&amp;amp;rdquo;)&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;3-&amp;lt;/strong&amp;gt; Tạo thuộc t&amp;amp;iacute;nh v&amp;amp;agrave; h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
- Đối với thuộc t&amp;amp;iacute;nh:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Nếu tạo ngay trong h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
this.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh = Gi&amp;amp;aacute;_Trị_Mặc_Định&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Nếu tạo b&amp;amp;ecirc;n ngo&amp;amp;agrave;i h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Lớp.prototype.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh = Gi&amp;amp;aacute;_Trị_Mặc_Định &amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hay&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh = Gi&amp;amp;aacute;_Trị_Mặc_Định&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;- Đối với h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh: Trong JavaScript kh&amp;amp;ocirc;ng hỗ trợ tạo h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh như ở c&amp;amp;aacute;c ng&amp;amp;ocirc;n ngữ hướng đối tượng kh&amp;amp;aacute;c nhưng ta c&amp;amp;oacute; thể d&amp;amp;ugrave;ng mẹo sau để giả lập:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Nếu tạo ngay trong h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
this.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh = Định_Nghĩa_H&amp;amp;agrave;m&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Nếu tạo b&amp;amp;ecirc;n ngo&amp;amp;agrave;i h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Lớp.prototype.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh = Định_Nghĩa_H&amp;amp;agrave;m&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hay&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh = Định_Nghĩa_H&amp;amp;agrave;m&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Phần Định_Nghĩa_H&amp;amp;agrave;m cũng giống như n&amp;amp;ecirc;u ở mục 2. Tuy nhi&amp;amp;ecirc;n, phần Nội dung h&amp;amp;agrave;m th&amp;amp;igrave; c&amp;amp;oacute; dạng:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
if (arguments.length == 0) {
// Giả lập h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh loại trả về gi&amp;amp;aacute; trị
return Gi&amp;amp;aacute;_Trị
}

// Giả lập h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh loại đặt gi&amp;amp;aacute; trị&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Ngo&amp;amp;agrave;i ra, c&amp;amp;aacute;ch thức truy cập h&amp;amp;agrave;m thuộc t&amp;amp;iacute;nh cũng kh&amp;amp;aacute;c c&amp;amp;aacute;ch truy cập thuộc t&amp;amp;iacute;nh b&amp;amp;igrave;nh thường. Cụ thể như sau:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
.khi cần lấy gi&amp;amp;aacute; trị: &amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh() &amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;.khi cần đặt gi&amp;amp;aacute; trị: &amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_Thuộc_T&amp;amp;iacute;nh(tham số 1,...) &amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;4-&amp;lt;/strong&amp;gt; Tạo h&amp;amp;agrave;m sự kiện&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Việc n&amp;amp;agrave;y phức tạp hơn một ch&amp;amp;uacute;t. Đầu ti&amp;amp;ecirc;n, ch&amp;amp;uacute;ng ta cần khai b&amp;amp;aacute;o h&amp;amp;agrave;m sự kiện:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Nếu tạo ngay trong h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
this.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK = new Function();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Nếu tạo b&amp;amp;ecirc;n ngo&amp;amp;agrave;i h&amp;amp;agrave;m tạo th&amp;amp;igrave; c&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;br /&amp;gt;
&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Lớp.prototype.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK = new Function();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hay&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK = new Function();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Kế tiếp, ch&amp;amp;uacute;ng ta định nghĩa 1 h&amp;amp;agrave;m chức năng sẽ gọi h&amp;amp;agrave;m sự kiện. Việc n&amp;amp;agrave;y giống phần 2, chỉ c&amp;amp;oacute; điều phần Nội dung h&amp;amp;agrave;m sẽ c&amp;amp;oacute; th&amp;amp;ecirc;m lệnh gọi h&amp;amp;agrave;m sự kiện như sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
if (Điều_Kiện == true) this.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Cuối c&amp;amp;ugrave;ng, ch&amp;amp;uacute;ng ta tạo một đối tượng v&amp;amp;agrave; g&amp;amp;aacute;n 1 h&amp;amp;agrave;m xử l&amp;amp;iacute; sự kiện v&amp;amp;agrave;o h&amp;amp;agrave;m sự kiện rỗng của đối tượng n&amp;amp;agrave;y. C&amp;amp;uacute; ph&amp;amp;aacute;p như sau:&amp;lt;br /&amp;gt;
&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
var T&amp;amp;ecirc;n_Đối_Tượng = new T&amp;amp;ecirc;n_Lớp();

T&amp;amp;ecirc;n_Đối_Tượng.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK = Định_Nghĩa_H&amp;amp;agrave;m;&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Trong trường hợp bạn muốn d&amp;amp;ugrave;ng c&amp;amp;ugrave;ng một h&amp;amp;agrave;m xử l&amp;amp;iacute; sự kiện cho mọi đối tượng c&amp;amp;ugrave;ng lớp th&amp;amp;igrave; chỉ cần d&amp;amp;ugrave;ng 1 trong 2 lệnh sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
this.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK = Định_Nghĩa_H&amp;amp;agrave;m;

T&amp;amp;ecirc;n_Lớp.prototype.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_SK = Định_Nghĩa_H&amp;amp;agrave;m;&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;5-&amp;lt;/strong&amp;gt; Tạo đối tượng&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Sau khi đ&amp;amp;atilde; định nghĩa 1 lớp, ch&amp;amp;uacute;ng ta c&amp;amp;oacute; thể tạo ra c&amp;amp;aacute;c biến đối tượng từ lớp đ&amp;amp;oacute; bằng c&amp;amp;aacute;ch d&amp;amp;ugrave;ng từ kho&amp;amp;aacute; new:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
var T&amp;amp;ecirc;n_Đối_Tượng = new T&amp;amp;ecirc;n_Lớp();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;T&amp;amp;ecirc;n_Lớp ở đ&amp;amp;acirc;y c&amp;amp;oacute; thể l&amp;amp;agrave; t&amp;amp;ecirc;n h&amp;amp;agrave;m tự tạo hay t&amp;amp;ecirc;n đối tượng c&amp;amp;oacute; sẵn của JavaScript như String, Number, Date, Array,...&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;strong&amp;gt;6-&amp;lt;/strong&amp;gt; Tạo kế thừa&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Để tạo lớp B kế thừa lớp A, ta d&amp;amp;ugrave;ng c&amp;amp;uacute; ph&amp;amp;aacute;p sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
B.prototype = new A();&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;B&amp;amp;acirc;y giờ th&amp;amp;igrave; lớp B đ&amp;amp;atilde; l&amp;amp;agrave; con của lớp A. Giả sử lớp A c&amp;amp;oacute; định nghĩa một h&amp;amp;agrave;m h1 v&amp;amp;agrave; lớp B muốn sửa đổi h&amp;amp;agrave;m n&amp;amp;agrave;y cho ph&amp;amp;ugrave; hợp nhưng vẫn giữ nguy&amp;amp;ecirc;n t&amp;amp;ecirc;n (giống như t&amp;amp;iacute;nh năng override h&amp;amp;agrave;m trong Java). Nếu sự sửa đổi n&amp;amp;agrave;y kh&amp;amp;ocirc;ng cần đến kết quả trả về từ h&amp;amp;agrave;m h1 của lớp A th&amp;amp;igrave; ta chỉ việc định nghĩa 1 h&amp;amp;agrave;m t&amp;amp;ecirc;n h1 trong lớp B như b&amp;amp;igrave;nh thường. Trong trường hợp ngược lại, vấn đề nảy sinh l&amp;amp;agrave; l&amp;amp;agrave;m thế n&amp;amp;agrave;o để gọi h&amp;amp;agrave;m h1 của lớp A như thể n&amp;amp;oacute; l&amp;amp;agrave; h&amp;amp;agrave;m chức năng của lớp B? Ta l&amp;amp;agrave;m như sau:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Khai b&amp;amp;aacute;o một biến parent&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
B.parent = A.prototype;&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Trong phần nội dung h&amp;amp;agrave;m h1 của lớp B, khi cần gọi h&amp;amp;agrave;m h1 của lớp A, sử dụng lệnh sau:&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
B.parent.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_Chuy&amp;amp;ecirc;n.call(this, tham số 1,...)&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hay&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: jscript;&amp;quot;&amp;gt;
B.parent.T&amp;amp;ecirc;n_H&amp;amp;agrave;m_Chuy&amp;amp;ecirc;n.apply(this, mảng tham số)&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;V&amp;amp;iacute; dụ minh họa&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Cuối c&amp;amp;ugrave;ng, ch&amp;amp;uacute;ng ta x&amp;amp;eacute;t một v&amp;amp;iacute; dụ đơn giản minh họa cho những phần đ&amp;amp;atilde; đề cập ở tr&amp;amp;ecirc;n. Mời c&amp;amp;aacute;c bạn tải m&amp;amp;atilde; nguồn (tập tin oop.html) &amp;lt;a href=&amp;quot;http://www.sinhvienngheo.biz/uploads/codes/down14.zip&amp;quot;&amp;gt;tại đ&amp;amp;acirc;y&amp;lt;/a&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;font face=&amp;quot;Arial&amp;quot; size=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;ST&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;</Body><CommentEnabled>True</CommentEnabled><ViewCount>0</ViewCount><ReleaseDate>10/30/2009 9:49:46 AM</ReleaseDate><TotalComment>0</TotalComment><IsMedia>False</IsMedia><IsPicture>False</IsPicture><IsVote>True</IsVote><ArticlePassword /><PostVisible>0</PostVisible><ArticlePath>/2009/10/30/Lap-trinh-huong-doi-tuong-voi-JavaScript-23C</ArticlePath><Approved>True</Approved><ImagePath /><CategoryId>30</CategoryId><ArrayCatID>30|25</ArrayCatID></Article></Articles>